package com.example.module_mvvm.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.example.module_mvvm.bean.UserBean
import com.example.module_mvvm.model.UserRepository

/**
 * 逻辑说明：
 * - 使用 ViewModel 持久化输入框的内容。
 * - 即使 Activity 被重建，输入内容依然保留。
 */
class UserViewModel:ViewModel() {

    private val userRepository = UserRepository()

    // LiveData用于观察数据变化
    // LiveData 作为数据源，配合观察者模式实现 UI 自动更新。
    private val _users = MutableLiveData<List<UserBean>>()
    val users: LiveData<List<UserBean>> get() = _users

    private val _errorMessage = MutableLiveData<String>()
    val errorMessage: LiveData<String> get() = _errorMessage

    private val _clearInput = MutableLiveData<Boolean>()
    val clearInput: LiveData<Boolean> get() = _clearInput

    init {
        loadUsers()
    }

    fun addUser(name: String) {
        if (name.isEmpty()) {
            _errorMessage.value = "用户名不能为空"
            return
        }

        try {
            val newUser = UserBean(id = userRepository.getNextId(), name = name)
            userRepository.addUser(newUser)
            loadUsers() // 重新加载数据
            _clearInput.value = true
        } catch (e: Exception) {
            _errorMessage.value = "添加用户失败: ${e.message}"
        }
    }

    private fun loadUsers() {
        _users.value = userRepository.getAllUsers()
    }

    // 重置一次性事件
    fun onClearInputHandled() {
        _clearInput.value = false
    }

    fun onErrorMessageShown() {
        _errorMessage.value = ""
    }
}